import { defineConfig } from 'vite';
import { resolve } from 'path';
import viteCompression from 'vite-plugin-compression';

export default defineConfig({
  // 生产环境构建配置
  build: {
    // 输出目录
    outDir: 'html',

    // 生成 source map
    // true（生成map，并且产物里有映射）|'hidden'（生成map，没有映射）|'inline'（直接就在产物里）
    sourcemap: 'hidden', // 对应 webpack 的 hidden-source-map

    // 压缩配置
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
      format: {
        comments: false,
      },
    },
    // 性能提示配置
    chunkSizeWarningLimit: 1000, // 1000kb
    rollupOptions: {
      output: {
        chunkFileNames: () => 'js/[name]-[hash].js',
        assetFileNames: assetInfo => {
          if (/\.css$/.test(assetInfo.name)) {
            return 'css/[name]-[hash][extname]';
          }
          return 'assets/[name]-[hash][extname]';
        },
        entryFileNames: 'js/[name]-[hash].js',
      },
    },
  },

  // 解析配置
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
    },
    extensions: ['.js', '.json'],
  },

  // 开发服务器配置
  server: {
    port: 8080,
    open: true,
  },

  // 插件配置
  plugins: [
    // gzip 压缩
    viteCompression({
      // 文件大小大于 threshold 才会被压缩
      threshold: 10240, // 10kb
      // 压缩算法
      algorithm: 'gzip',
      // 文件类型
      include: [/\.(js|css|html|svg)$/],
      exclude: [/\.(png|jpg|gif)$/],
    }),
  ],
});
